package com.testing.class9;

import java.util.Arrays;

public class RecursionTest {

    public static void main(String[] args) {
        System.out.println(jiecheng(5));
        System.out.println(fib(10));
        System.out.println(fib(15,10));


    }


    //求n的阶乘
    public static int jiecheng(int n) {
        int result = 1;
        //递归出口
        if (n == 1) {
            result = 1;
        } else {
            //n的阶乘  n!=n*(n-1)!
            result = n * jiecheng(n - 1);
        }
        return result;
    }


    //斐波那契数列：  从第三个数开始，等于前两个数相加之和。   1 1 2 3 5 8 13 21 34 55 ……
    public static int fib(int xiang){
        int result=1;
        //fib(n)=fib(n-1)+fib(n-2)
        //递归出口
        if(xiang==1||xiang==2){
            result=1;
        }
        else{
            //递归处理
            result=fib(xiang-1)+fib(xiang-2);
        }
        return result;
    }


    //不用递归，实现斐波那契数列,为了实现重载，多加个参数，即斐波那契数列的长度。
    public static int fib(int n,int xiang){
            int[] a=new int[n];
            a[0]=1;
            a[1]=1;
            //循环生成每个数
            for(int i=2;i<a.length;i++){
                a[i]=a[i-1]+a[i-2];
            }
             System.out.println(Arrays.toString(a));
            return a[xiang-1];
    }

}
